package com.itheima.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.reggie.common.R;
import com.itheima.reggie.entity.Employee;
import com.itheima.reggie.service.EmployeeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

/**
 * @author ：sean
 * @date ：Created in 2022/5/16
 * @description ：员工控制器
 * 完成员工的登录、登出、增删改查
 * @version: 1.0
 */
@RestController
@Slf4j
@RequestMapping("/employee")
public class EmployeeController {
	@Autowired
	private EmployeeService employeeService;
	// 请求数据，封装到对象里面去,如何客户端是post请求，一定RequestBody
	// 响应 json对象
	@PostMapping("/login")
	public R<Employee> login(@RequestBody Employee employee,
						   HttpServletRequest request){
		// 打印,输出请求的参数，非常重要，便于我们排错
		log.info("[员工登录] employee:{}",employee);
		// 具体的业务开发
		// 通过service完成业务,要对业务进行分析（根据原型及产品的需求文档）
		// 把客户端密码，MD5处理
		String password = employee.getPassword();
		String md5Password = DigestUtils.md5DigestAsHex(password.getBytes());
		// 通过业务对象，查询用户,根据用户名查询用户
		LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
		// MP省去简单的SQL，通过Wrapper进行查询
		queryWrapper.eq(Employee::getUsername,employee.getUsername());
		Employee one = employeeService.getOne(queryWrapper);
		if(one == null){
			// 如果为空，用户名不正确
			return R.error("用户名不正确");
		}
		// 如果one不为空，说明用户名正确，接下来比对什么？
		if(!one.getPassword().equals(md5Password)){
			// 登录失败
			return R.error("密码不正确");
		}
		// 如果密码正确，还要看员工状态
		Integer status = one.getStatus();
		if (status == 0){
			return R.error("登录失败,员工被禁用");
		}
		// 把员工ID，存入Session
		request.getSession().setAttribute("employee",one.getId());
		// 把对象返回
		return R.success(one);
	}

	@PostMapping("/logout")
	public R<String> logout(HttpServletRequest request){
		log.info("[员工登出]");
		request.getSession().removeAttribute("employee");
		return R.success("登出成功");
	}
}
